home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / gfx / misc / gnuplot-3.7src.lha / gnuplot-3.7src / gnuplot-3.7.lha / gnuplot-3.7 / term / mgr.trm < prev    next >
Text File  |  1998-11-26  |  6KB  |  242 lines

  1. /*
  2.  * Id: $
  3.  */
  4.  
  5. /* GNUPLOT - mgr.trm */
  6.  
  7. /*[
  8.  * Copyright 1986 - 1993, 1998   Thomas Williams, Colin Kelley
  9.  *
  10.  * Permission to use, copy, and distribute this software and its
  11.  * documentation for any purpose with or without fee is hereby granted,
  12.  * provided that the above copyright notice appear in all copies and
  13.  * that both that copyright notice and this permission notice appear
  14.  * in supporting documentation.
  15.  *
  16.  * Permission to modify the software is granted, but not the right to
  17.  * distribute the complete modified source code.  Modifications are to
  18.  * be distributed as patches to the released version.  Permission to
  19.  * distribute binaries produced by compiling modified sources is granted,
  20.  * provided you
  21.  *   1. distribute the corresponding source modifications from the
  22.  *    released version in the form of a patch file along with the binaries,
  23.  *   2. add special version identification to distinguish your version
  24.  *    in addition to the base release version number,
  25.  *   3. provide your name and address as the primary contact for the
  26.  *    support of your modified version, and
  27.  *   4. retain our contact information in regard to use of the base
  28.  *    software.
  29.  * Permission to distribute the released version of the source code along
  30.  * with corresponding source modifications in the form of a patch file is
  31.  * granted with same provisions 2 through 4 for binary distributions.
  32.  *
  33.  * This software is provided "as is" without express or implied warranty
  34.  * to the extent permitted by applicable law.
  35. ]*/
  36.  
  37. /*
  38.  * This file is included by ../term.c.
  39.  *
  40.  * This terminal driver supports:
  41.  *  Mgr window system, color display
  42.  *
  43.  * AUTHOR
  44.  *  Vincent Broman, broman@nosc.mil
  45.  */
  46. /*
  47.  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
  48.  */
  49.  
  50. #include "driver.h"
  51.  
  52. #ifdef TERM_REGISTER
  53. register_term(mgr)
  54. #endif
  55.  
  56. #ifdef TERM_PROTO
  57. TERM_PUBLIC void MGR_init __PROTO((void));
  58. TERM_PUBLIC void MGR_graphics __PROTO((void));
  59. TERM_PUBLIC void MGR_text __PROTO((void));
  60. TERM_PUBLIC void MGR_linetype __PROTO((int linetype));
  61. TERM_PUBLIC void MGR_move __PROTO((unsigned int x, unsigned int y));
  62. TERM_PUBLIC void MGR_vector __PROTO((unsigned int x, unsigned int y));
  63. TERM_PUBLIC void MGR_put_text __PROTO((unsigned int x, unsigned int y, char *str));
  64. TERM_PUBLIC void MGR_reset __PROTO((void));
  65. #define MGR_XMAX 640
  66. #define MGR_YMAX 400
  67. #define MGR_VCHAR 16
  68. #define MGR_HCHAR 8
  69. #define MGR_VTIC 4
  70. #define MGR_HTIC 4
  71. #endif /* TERM_PROTO */
  72.  
  73. #ifndef TERM_PROTO_ONLY
  74. #ifdef TERM_BODY
  75. #undef ESC
  76. #include <term.h>        /* from Mgr, not gnuplot */
  77.  
  78.  
  79.  
  80. static int MGR_border = 5;
  81. static int MGR_winnbr = 0;
  82.  
  83. static int MGR_rowcount = 24;
  84. static int MGR_winwidth = MGR_XMAX;
  85. static int MGR_winheight = MGR_YMAX;
  86. static int MGR_vchar = MGR_VCHAR;
  87. static int MGR_hchar = MGR_HCHAR;
  88.  
  89.  
  90. TERM_PUBLIC void MGR_init()
  91. {
  92.     char res[300];
  93.     int winnbr;
  94.     int w, h, bor;
  95.  
  96.     m_setup(0);
  97.     m_ttyset();
  98.  
  99.     m_getinfo(G_SYSTEM);
  100.     if (m_gets(res) && sscanf(res, "%*s%d%d%d", &w, &h, &bor) == 3)
  101.     MGR_border = bor;
  102.  
  103.     m_newwin(0, 0, MGR_winwidth + 2 * MGR_border,
  104.          MGR_winheight + 2 * MGR_border);
  105.  
  106.     if (m_gets(res) && sscanf(res, "%d", &winnbr) == 1)
  107.     MGR_winnbr = winnbr;
  108.  
  109.     /* if no alt window is created, then the main window is used
  110.      * and if size is different, term_tbl updated later */
  111.     m_selectwin(MGR_winnbr);
  112.     m_setmode(M_ABS);
  113.  
  114.     m_getinfo(G_FONT);
  115.     if (m_gets(res) && sscanf(res, "%d %d", &w, &h) == 2) {
  116.     MGR_vchar = h;
  117.     MGR_hchar = w;
  118.     }
  119.     m_ttyreset();
  120.  
  121.     term->v_char = MGR_vchar;
  122.     term->h_char = MGR_hchar;
  123.     term->v_tic = MGR_vchar / 4;
  124.     term->h_tic = MGR_hchar / 2;
  125.  
  126.     m_selectwin(0);
  127.     m_flush();
  128. }
  129.  
  130.  
  131. TERM_PUBLIC void MGR_graphics()
  132. {
  133.     char res[32];
  134.     int c, r, w, h;
  135.  
  136.     m_selectwin(MGR_winnbr);
  137.     m_setmode(M_ACTIVATE);
  138.     m_clear();
  139.  
  140.     /* we permit the user to reshape the window arbitrarily.
  141.        do_plot calls boundary to recheck the term_tbl for each plot */
  142.     m_ttyset();
  143.     m_getinfo(G_WINSIZE);
  144.     if (m_gets(res) && sscanf(res, "%d %d", &c, &r) == 2)
  145.     MGR_rowcount = r;
  146.     m_getinfo(G_COORDS);
  147.     if (m_gets(res) && sscanf(res, "%d %d %d %d", &c, &r, &w, &h) == 4) {
  148.     term->xmax = MGR_winwidth = w;
  149.     term->ymax = MGR_winheight = h;
  150.     }
  151.     m_ttyreset();
  152.     m_flush();
  153. }
  154.  
  155.  
  156. TERM_PUBLIC void MGR_text()
  157. {
  158.     m_go(0, 0);
  159.     m_aligntext();
  160.     if (MGR_winnbr == 0)
  161.     m_move(0, MGR_rowcount - 1);
  162.     m_selectwin(0);
  163.     m_flush();
  164. }
  165.  
  166.  
  167. TERM_PUBLIC void MGR_linetype(linetype)
  168. int linetype;
  169. {
  170. /*
  171.  * this mapping of colors is intended for a color sun on which
  172.  * colors 0-23 are defined, 0 is white, 1 is black.
  173.  */
  174.     m_linecolor(B_SRC, (linetype < 0) ? 1 : (2 + (linetype % 22)));
  175. }
  176.  
  177.  
  178. TERM_PUBLIC void MGR_move(x, y)
  179. unsigned int x, y;
  180. {
  181.     m_go(x, MGR_winheight - 1 - y);
  182. }
  183.  
  184.  
  185. TERM_PUBLIC void MGR_vector(x, y)
  186. unsigned int x, y;
  187. {
  188.     m_draw(x, MGR_winheight - 1 - y);
  189. }
  190.  
  191.  
  192. TERM_PUBLIC void MGR_put_text(x, y, str)
  193. unsigned int x, y;
  194. char *str;
  195. {
  196.     MGR_move(x, y - MGR_vchar / 2);
  197.     m_aligntext();
  198.     m_printstr(str);
  199. }
  200.  
  201.  
  202. TERM_PUBLIC void MGR_reset()
  203. {
  204.     m_destroywin(MGR_winnbr);
  205.     MGR_winnbr = 0;
  206.     m_setmode(M_ACTIVATE);
  207.     m_flush();
  208. }
  209.  
  210. #endif /* TERM_BODY */
  211.  
  212. #ifdef TERM_TABLE
  213.  
  214. TERM_TABLE_START(mgr_driver)
  215.     "mgr", "Mgr window system",
  216.     /* dimensions nominal, replaced during MGR_graphics call */
  217.     MGR_XMAX, MGR_YMAX, MGR_VCHAR, MGR_HCHAR,
  218.     MGR_VTIC, MGR_HTIC, options_null, MGR_init, MGR_reset,
  219.     MGR_text, null_scale, MGR_graphics, MGR_move, MGR_vector,
  220.     MGR_linetype, MGR_put_text, null_text_angle,
  221.     null_justify_text, do_point, do_arrow, set_font_null
  222. TERM_TABLE_END(mgr_driver)
  223.  
  224. #undef LAST_TERM
  225. #define LAST_TERM mgr_driver
  226.  
  227. #endif /* TERM_TABLE */
  228. #endif /* TERM_PROTO_ONLY */
  229.  
  230. #ifdef TERM_HELP
  231. START_HELP(mgr)
  232. "1 mgr",
  233. "?commands set terminal mgr",
  234. "?set terminal mgr",
  235. "?set term mgr",
  236. "?terminal mgr",
  237. "?term mgr",
  238. "?mgr",
  239. " The `mgr` terminal driver supports the Mgr Window system.  It has no options."
  240. END_HELP(mgr)
  241. #endif
  242.